home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / libraries / patchlibv3.lha / patchlibrary / examples / ShowNeededFiles.asm < prev   
Assembly Source File  |  1994-01-25  |  9KB  |  387 lines

  1. ;1993 Copyright by Stefan Fuchs
  2. ;SNF is Freeware
  3.  
  4.     include "ASMMacros.i"
  5.     include "dos/dosextens.i"
  6.     include "patch/patchtags.i"
  7.  
  8. execbase    equ    4
  9. _DOSBase        equr    A5
  10. _PATCHBase      equr    A4
  11.  
  12. _LVOOpenLibrary        equ    -552    ;exec.library
  13. _LVOCloseLibrary    equ    -414
  14. _LVOWait        equ    -318
  15. _LVOFindTask        equ    -294
  16.  
  17. _LVOLoadSeg        equ    -150        ;dos.library
  18. _LVOOpen        equ    -30
  19. _LVOOutPut        equ    -60
  20. _LVOLock        equ    -84
  21. _LVOIOErr        equ    -132
  22.  
  23. _LVOInstallPatchTagsA    equ    -54    ;patch.library
  24. _LVORemovePatchTagsA    equ    -60
  25.  
  26. REVISION        MACRO
  27.                 dc.b "1.5"
  28.                 ENDM
  29. REVDATE         MACRO
  30.                 dc.b "31-Dez-93"
  31.                 ENDM
  32.  
  33.  
  34. Main:
  35.     sub.l    _DOSBase,_DOSBase
  36.     sub.l    _PATCHBase,_PATCHBase
  37.     move.l    execbase,a6
  38.  
  39.     lea.l    dosname(pc),a1        ;Open Dos Library
  40.     moveq.l    #0,d0
  41.     jsr    _LVOOpenLibrary(a6)
  42.     tst.l    d0
  43.     beq    DosFailed
  44.     move.l    d0,_DOSBase
  45.  
  46.     move.l    d0,a6
  47.     jsr    _LVOOutPut(a6)
  48.     move.l    d0,OutPutHandle
  49.     beq    NoOutPutExit
  50.  
  51.  
  52.     lea.l    Header(pc),a0        ;Print Title Text
  53.     bsr    TextOutput
  54.  
  55.     move.l    execbase,a6
  56.     lea.l    patchname(pc),a1    ;Open Patch Library Version 2
  57.     moveq.l    #2,d0
  58.     jsr    _LVOOpenLibrary(a6)
  59.     tst.l    d0
  60.     beq    PatchFailed
  61.     move.l    d0,_PATCHBase
  62.  
  63.  
  64.     move.l    _PATCHBase,a6
  65.     lea.l    InstallTags(pc),a1
  66.     move.l    _DOSBase,4(a1)        ;Pointer to Library
  67.     lea.l    IDString(pc),a0        ;ID for PatchList
  68.     move.l    a0,12(a1)
  69.     move.l    #5,20(a1)        ;Priority 5: before original
  70.  
  71.  
  72.     lea.l    PreLoadSeg(pc),a0
  73.     move.l    #_LVOLoadSeg,d0
  74.     jsr    _LVOInstallPatchTagsA(a6)
  75.     lea.l    PreLoadSegFailed(pc),a0
  76.     move.l    d0,PreLoadSegPatch
  77.     BSREQ    TextOutput
  78.  
  79.     lea.l    InstallTags(pc),a1
  80.     lea.l    PreOpen(pc),a0
  81.     move.l    #_LVOOpen,d0
  82.     jsr    _LVOInstallPatchTagsA(a6)
  83.     lea.l    PreOpenFailed(pc),a0
  84.     move.l    d0,PreOpenPatch
  85.     BSREQ TextOutput
  86.  
  87.     lea.l    InstallTags(pc),a1
  88.     lea.l    PreLock(pc),a0
  89.     move.l    #_LVOLock,d0
  90.     jsr    _LVOInstallPatchTagsA(a6)
  91.     lea.l    PreLockFailed(pc),a0
  92.     move.l    d0,PreLockPatch
  93.     BSREQ TextOutput
  94.  
  95.     lea.l    InstallTags(pc),a1
  96.     move.l    #-5,20(a1)        ;Priority -5: after original
  97.     lea.l    AfterLoadSeg(pc),a0
  98.     move.l    #_LVOLoadSeg,d0
  99.     jsr    _LVOInstallPatchTagsA(a6)
  100.     lea.l    AfterLoadSegFailed(pc),a0
  101.     move.l    d0,AfterLoadSegPatch
  102.     BSREQ TextOutput
  103.  
  104.     lea.l    InstallTags(pc),a1
  105.     lea.l    AfterOpen(pc),a0
  106.     move.l    #_LVOOpen,d0
  107.     jsr    _LVOInstallPatchTagsA(a6)
  108.     lea.l    AfterOpenFailed(pc),a0
  109.     move.l    d0,AfterOpenPatch
  110.     BSREQ TextOutput
  111.  
  112.     lea.l    InstallTags(pc),a1
  113.     lea.l    AfterLock(pc),a0
  114.     move.l    #_LVOLock,d0
  115.     jsr    _LVOInstallPatchTagsA(a6)
  116.     lea.l    AfterLockFailed(pc),a0
  117.     move.l    d0,AfterLockPatch
  118.     BSREQ TextOutput
  119.  
  120.  
  121. MainLoop:
  122.     moveq.l #0,d0
  123.     bset.l #12,d0
  124.     CALL _LVOWait,execbase
  125.  
  126.  
  127.     move.l    _PATCHBase,a6
  128.  
  129.     move.l    PreLoadSegPatch,a0
  130.     lea.l    RemoveTags(pc),a1
  131.     jsr    _LVORemovePatchTagsA(a6)
  132.     lea.l    PreLoadSegRemFailed(pc),a0
  133.     tst.l    d0
  134.     BSRNE    TextOutput,MainLoop
  135.     move.l    d0,PreLoadSegPatch
  136.  
  137.     move.l    PreOpenPatch,a0
  138.     lea.l    RemoveTags(pc),a1
  139.     jsr    _LVORemovePatchTagsA(a6)
  140.     lea.l    PreOpenRemFailed(pc),a0
  141.     tst.l    d0
  142.     BSRNE    TextOutput,MainLoop
  143.     move.l    d0,PreOpenPatch
  144.  
  145.     move.l    PreLockPatch,a0
  146.     lea.l    RemoveTags(pc),a1
  147.     jsr    _LVORemovePatchTagsA(a6)
  148.     lea.l    PreLockRemFailed(pc),a0
  149.     tst.l    d0
  150.     BSRNE    TextOutput,MainLoop
  151.     move.l    d0,PreLockPatch
  152.  
  153.     move.l    AfterLoadSegPatch,a0
  154.     lea.l    RemoveTags(pc),a1
  155.     jsr    _LVORemovePatchTagsA(a6)
  156.     lea.l    AfterLoadSegRemFailed(pc),a0
  157.     tst.l    d0
  158.     BSRNE    TextOutput,MainLoop
  159.     move.l    d0,AfterLoadSegPatch
  160.  
  161.     move.l    AfterOpenPatch,a0
  162.     lea.l    RemoveTags(pc),a1
  163.     jsr    _LVORemovePatchTagsA(a6)
  164.     lea.l    AfterOpenRemFailed(pc),a0
  165.     tst.l    d0
  166.     BSRNE    TextOutput,MainLoop
  167.     move.l    d0,AfterOpenPatch
  168.  
  169.     move.l    AfterLockPatch,a0
  170.     lea.l    RemoveTags(pc),a1
  171.     jsr    _LVORemovePatchTagsA(a6)
  172.     lea.l    AfterLockRemFailed(pc),a0
  173.     tst.l    d0
  174.     BSRNE    TextOutput,MainLoop
  175.     move.l    d0,AfterLockPatch
  176.  
  177.  
  178.     move.l    execbase,a6
  179.     move.l    _PATCHBase,a1
  180.     jsr    _LVOCloseLibrary(a6)        ;Close patch Library
  181.  
  182. PatchFailed:
  183.     cmp.l    #0,_PATCHBase
  184.     bne    PatchFailedSkip
  185.     lea.l    ReqPatchLib(pc),a0
  186.     bsr    TextOutput
  187.  
  188. PatchFailedSkip:
  189. NoOutPutExit:
  190.     move.l    execbase,a6
  191.     move.l    _DOSBase,a1
  192.     jsr    _LVOCloseLibrary(a6)        ;Close dos Library
  193.  
  194. DosFailed:
  195.     rts
  196. ;----------------------------
  197. PreLoadSeg:
  198.     movem.l a0,-(sp)
  199.     lea.l LoadSegText(pc),a0
  200.     bsr TextOutputPatch
  201.     move.l d1,a0
  202.     bsr TextOutputPatch
  203.     move.l (sp)+,a0
  204.     rts
  205. ;------
  206. AfterLoadSeg:
  207. AfterOpen:
  208. AfterLock:
  209.     movem.l a0/d7,-(sp)
  210.     lea.l SuccessfulText(pc),a0
  211.     tst.l d0
  212.     bne.s AfterLoadsegSkip
  213.     lea.l FailedText(pc),a0
  214. AfterLoadsegSkip:
  215.     bsr GetIOErr
  216.     bsr TextOutputPatch
  217.     lea.l ReturnText(pc),a0
  218.     bsr TextOutputPatch
  219.     bsr SetIOErr
  220.     movem.l (sp)+,a0/d7
  221.     rts
  222. ;-------
  223. PreOpen:
  224.     move.l a0,-(sp)
  225.     lea.l OpenText(pc),a0
  226.     bsr TextOutputPatch
  227.     move.l d1,a0
  228.     bsr TextOutputPatch
  229.     move.l (sp)+,a0
  230.     rts
  231. ;-------
  232. PreLock:
  233.     move.l a0,-(sp)
  234.     lea.l LockText(pc),a0
  235.     bsr TextOutputPatch
  236.     move.l d1,a0
  237.     bsr TextOutputPatch
  238.     move.l (sp)+,a0
  239.     rts
  240. ;------------------------------------
  241. GetIOErr:
  242. ;a6 = DosBase
  243. ;Result: d7 = errorcode
  244.     movem.l d0/d1/a0/a1,-(sp)
  245.     CALL _LVOIOErr
  246.     move.l d0,d7
  247.     movem.l (sp)+,d0/d1/a0/a1
  248.     rts
  249. ;--------------
  250. SetIOErr:
  251. ;d7 = old errorcode
  252.     movem.l d0/d1/a0/a1/a6,-(sp)
  253.     sub.l a1,a1
  254.     CALL _LVOFindTask,execbase
  255.     move.l d0,a0
  256.     move.l d7,pr_Result2(a0)
  257.     move.l pr_CLI(a0),d0
  258.     beq SetIOExit
  259.     lsl.l #2,d0
  260.     move.l d0,a0
  261.     move.l d7,cli_Result2(a0)
  262.  
  263. SetIOExit:
  264.     movem.l (sp)+,d0/d1/a0/a1/a6
  265.     rts
  266. ******************************************************************V1.3*
  267. * Name:        TextOutputPatch
  268. * Function:    Writes a C-string to std output (CLI,PRT,...)
  269. * Version:    V1.2b    (works)
  270. * Assembler:    OMA V2.00
  271. * Copyright:    1991 Stefan Fuchs
  272. *
  273. * Inputs:    a0 = Pointer to a C-string
  274. *        a6 = DosBase
  275. * Assumptions:    DosBase
  276. * Results:
  277. * Destroyed registers:
  278. * Code:        pc-relative
  279. * Known bugs:
  280. * See also:
  281. * Notes:    Exits without any output, a0 is null
  282. *        SPECIAL VERSION FOR SHOWNEEDEDFILES
  283. ***********************************************************************
  284. TextOutputPatch:
  285.     movem.l d0-d3/a0/a1,-(sp)
  286.     moveq.l #50,d0
  287.     moveq.l #0,d3
  288.     move.l a0,d2
  289.     beq.s TextOutputPatchExit
  290. TextOutputPatchLoop:
  291.     addq.l #1,d3
  292.     tst.b (a0)+
  293.     dbeq d0,TextOutputPatchLoop
  294.     move.l OutPutHandle,d1
  295.     jsr -48(a6)    ;Write
  296. TextOutputPatchExit:
  297.     movem.l (sp)+,d0-d3/a0/a1
  298.     rts
  299. ******************************************************************V1.3*
  300. * Name:        TextOutput
  301. * Function:    Writes a C-string to std output (CLI,PRT,...)
  302. * Version:    V1.2    (works)
  303. * Assembler:    OMA V2.00
  304. * Copyright:    1991 Stefan Fuchs
  305. *
  306. * Inputs:    a0 = Pointer to a C-string
  307. * Assumptions:    DosBase
  308. * Results:    
  309. * Destroyed registers:
  310. * Code:        pc-relative
  311. * Known bugs:    
  312. * See also:    
  313. * Notes:    Exits without any output,
  314. *        if the Outputhandle or a0 is null
  315. ***********************************************************************
  316. TextOutput:
  317.     movem.l d0-d3/a0/a1/a6,-(sp)
  318.     moveq.l #0,d3
  319.     move.l a0,d2
  320.     beq.s TextOutputExit
  321. TextOutputLoop:
  322.     addq.l #1,d3
  323.     tst.b (a0)+
  324.     bne.S TextOutputLoop
  325.     move.l _DOSBase,a6
  326.     jsr -60(a6)    ;OutPut
  327.     move.l d0,d1
  328.     beq.s TextOutputExit
  329.     jsr -48(a6)    ;Write
  330. TextOutputExit:
  331.     movem.l (sp)+,d0-d3/a0/a1/a6
  332.     rts
  333. ;--------------------------------------
  334. OutPutHandle:        dc.l 0
  335. PreLoadSegPatch:    dc.l 0
  336. PreOpenPatch:        dc.l 0
  337. PreLockPatch:        dc.l 0
  338. AfterLoadSegPatch:    dc.l 0
  339. AfterOpenPatch:        dc.l 0
  340. AfterLockPatch:        dc.l 0
  341.  
  342. DosName:    dc.b "dos.library",0
  343. PatchName:    dc.b "patch.library",0
  344. PreLoadSegFailed:    dc.b "Can't install 1. LoadSeg() patch",10,0
  345. PreOpenFailed:        dc.b "Can't install 1. Open() patch",10,0
  346. PreLockFailed:        dc.b "Can't install 1. Lock() patch",10,0
  347. AfterLoadSegFailed:    dc.b "Can't install 2. LoadSeg() patch",10,0
  348. AfterOpenFailed:    dc.b "Can't install 2. Open() patch",10,0
  349. AfterLockFailed:    dc.b "Can't install 2. Lock() patch",10,0
  350. PreLoadSegRemFailed:    dc.b "Can't remove 1. LoadSeg() patch - CTRL-C to retry",10,0
  351. PreOpenRemFailed:    dc.b "Can't remove 1. Open() patch - CTRL-C to retry",10,0
  352. PreLockRemFailed:    dc.b "Can't remove 1. Lock() patch - CTRL-C to retry",10,0
  353. AfterLoadSegRemFailed:    dc.b "Can't remove 2. LoadSeg() patch - CTRL-C to retry",10,0
  354. AfterOpenRemFailed:    dc.b "Can't remove 2. Open() patch - CTRL-C to retry",10,0
  355. AfterLockRemFailed:    dc.b "Can't remove 2. Lock() patch - CTRL-C to retry",10,0
  356. ReturnText:    dc.b 10,0
  357. FailedText:    dc.b "        FAILED",0
  358. SuccessfulText:    dc.b "        OK",0
  359. LoadSegText:    dc.b "Loadseg    : ",0
  360. OpenText:    dc.b "Open       : ",0
  361. LockText:    dc.b "Lock       : ",0
  362.  
  363.     even
  364.  
  365. InstallTags:    dc.l PATT_LibraryBase,0
  366.         dc.l PATT_PatchName,0
  367.         dc.l PATT_Priority,0
  368.         dc.l 0
  369. RemoveTags:    dc.l PATT_TimeOut,50
  370.         dc.l 0
  371.  
  372. dosname         dc.b    "dos.library",0
  373. patchname    dc.b    "patch.library",0
  374. Header          dc.b    $9B,"1;33",$6D
  375.                 dc.b    "$VER: SNF - Show Needed Files"
  376.                 dc.b    " "
  377.                 REVISION
  378.                 dc.b    " ("
  379.                 REVDATE
  380.                 dc.b    ")"
  381.                 dc.b    $9B,$6D
  382.                 dc.b    " by Stefan Fuchs",10,0
  383. ReqPatchLib:    dc.b "*** Requires patch.library V2+ in libs:",10,0
  384. IDString:    dc.b "SNF",0
  385.  
  386.                 END
  387.